package cn.zzq.aix.nativeinterface.javareflector;

import java.lang.reflect.Type;

import gnu.math.Complex;
import gnu.math.DFloNum;
import gnu.math.IntNum;

public class NumberUtil {

	public static Complex JavaNumber2AINumber(Number number) {
		if (number instanceof Float || number instanceof Double) {
			return new DFloNum(number.doubleValue());
		} else {
			return IntNum.valueOf(number.toString());
		}
	}


	/**
	 * ai的数字类型根据type参数转换为对应的java的数字类型， 如果type为java.lang.Number类型，那么默认以double类型转换
	 * 如果type为java.lang.Object类型，那么转换失败，默认直接返回ai数字对象
	 * 
	 * @param number
	 *            ai数字对象
	 * @param type
	 *            java数字类型
	 * @return
	 */
	public static Object AINumber2JavaNumber(Complex number, Type type) {
		if (type == double.class) {
			return number.doubleValue();
		} else if (type == float.class) {
			return number.floatValue();
		} else if (type == short.class) {
			return number.shortValue();
		} else if (type == byte.class) {
			return number.byteValue();
		} else if (type == int.class) {
			return number.intValue();
		} else if (type == long.class) {
			return number.longValue();
		} else if (type == Number.class) {
			return number.doubleValue();
		} else {
			return number;
		}
	}

	/**
	 * 文本的数字类型根据type参数转换为对应的java的数字类型， 如果type为java.lang.Object类型，那么转换失败，默认直接返回ai数字对象
	 * 
	 * @param numStr
	 * @param type
	 * @return
	 */
	public static Object parseAsJavaNumber(Object numStr, Type type) {
		if (type == double.class) {
			return Double.parseDouble(numStr.toString());
		} else if (type == float.class) {
			return Float.parseFloat(numStr.toString());
		} else if (type == short.class) {
			return Short.parseShort(numStr.toString());
		} else if (type == byte.class) {
			return Byte.parseByte(numStr.toString());
		} else if (type == int.class) {
			return Integer.parseInt(numStr.toString());
		} else if (type == long.class) {
			return Long.parseLong(numStr.toString());
		} else {
			return numStr;
		}
	}
}
